Constraint-logic programming